package cn.buk.tms.dao;

import cn.buk.tms.dto.*;

import java.time.LocalDate;
import java.util.Date;
import java.util.List;

public interface ReportDao {

  List<CarrierStatisticsDto> getCarrierStatistics(int enterpriseId, Date fromDate, Date toDate);

  List<PnrSummary> getPnrSummary(int enterpriseId);

  List<PnrDzSummary> getPnrDzSummary(int enterpriseId, String etermUsername);

  /**
   * 机票出票量报表
   *
   * @return
   */
  List<ReportFlightTicketDto> searchFlightTickets(int enterpriseId, Date beginDate, Date endDate, int supplierId);

  /**
   * 退票账单报表
   */
  List<ReportFlightRefundDto> searchFlightRefunds(int enterpriseId, Date beginDate, Date endDate);

  /**
   * 改签账单报表
   */
  List<ReportFlightChangeDto> searchFlightChanges(int enterpriseId, Date beginDate, Date endDate);

  /**
   * 增值服务报表
   */
  List<ReportVasDto> searchVasOrders(int enterpriseId, Date beginDate, Date endDate);

  /**
   * 酒店账单报表
   */
  List<ReportHotelDto> searchHotelOrders(int enterpriseId, Date beginDate, Date endDate);

  /**
   * 火车票账单报表
   */
  List<ReportTrainDto> searchTrainOrders(int enterpriseId, Date beginDate, Date endDate);


  /**
   * 账单月统计（包括所有账单）
   *
   * @param enterpriseId
   * @param beginDate
   * @param endDate
   * @return
   */
  List<ReportStatisticDto> statMonthly(int enterpriseId, LocalDate beginDate, LocalDate endDate);

  /**
   * 账单日统计
   *
   * @param enterpriseId
   * @param beginDate
   * @param endDate
   * @return
   */
  List<ReportStatisticDto> statDaily(int enterpriseId, LocalDate beginDate, LocalDate endDate);

  /**
   * 统计有业务记录的客户信息
   */
  List<ReportStatisticDto> statBusinessCustomer(int enterpriseId, LocalDate beginDate, LocalDate endDate);

  /**
   * 按供应商进行统计
   */
  List<ReportStatisticDto> statAmountBySupplier(int enterpriseId, int dateType, Date beginDate, Date endDate,
                                                List<Integer> allowedCustomerIds);

  /**
   * 按支付方式统计支付金额
   *
   * @return
   */
  List<ReportStatisticDto> statAmountByPaymentMethod(int enterpriseId, int dateType, Date beginDate, Date endDate1,
                                                     List<Integer> allowedCustomerIds);

  List<ReportStatisticDto> statFlightMonthSaleByOp1(int enterpriseId, Date beginDate, Date endDate, List<Integer> allowedCustomerIds);

  List<ReportStatisticDto> statFlightMonthSaleByOp2(int enterpriseId, Date beginDate, Date endDate, List<Integer> allowedCustomerIds);


  /**
   * 统计销售人员的业绩
   *
   * @param enterpriseId
   * @param beginDate
   * @param endDate
   * @param allowedCustomerIds
   * @return
   */
  List<ReportStatisticDto> statMonthSaleBySalesman(int enterpriseId, Date beginDate, Date endDate, List<Integer> allowedCustomerIds);

  /**
   * 航司业绩销售统计
   *
   * @param enterpriseId
   * @param beginDate
   * @param endDate
   * @return
   */
  List<ReportStatisticDto> statMonthSaleByAirlines(int enterpriseId, Date beginDate, Date endDate);


}
